class MyCircularQueue {

    private int[] elem;
    private int usedSize;
    /**
    * 构造方法
    * @param k K个大小
    */
    public int front;
    public int rear;

    public MyCircularQueue(int k) {
        this.usedSize++;
        this.elem = new int[k+1];
    }

    /**
     * 入队
     * 1、判断是不是满的？
     * 2、把当前需要存放的元素放到rear下标的地方。
     * @param value
     * @return
     */
    public boolean enQueue(int value) {
         if(isFull()) {
             System.out.println("该队列已满不能存放元素");
             return false;
         }
             this.elem[rear] = value;
             rear = (rear+1)%this.elem.length;
             this.usedSize++;
             return true;
    }

    /**
    * 出队
    * @return
    */
    public boolean deQueue() {
            if(isEmpty()){
                return false;
            }
            this.front = (front+1)%this.elem.length;
            return false;
    }

    /**
    * 得到队头元素
    * @return
    */
    public int Front() {
        if(isEmpty()){
            return -1;
        }
        return this.elem[front];
    }

    /**
    * 得到队尾元素
    * @return
    */
    public int Rear() {
        return (rear==0) ? this.elem.length:rear-1;
    }

    /**
    * 当前循环队列是否为空
    * @return
    */
    public boolean isEmpty() {
         return this.rear==this.front;
    }

    /**
    * 判断当前队列是否为满
    * @return
    */
    public boolean isFull() {
        if(rear%elem.length==front){
            return true;
        }
        return false;
    }
}